package com.bst.bsj.bops.web.controller;

import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.bst.bsj.base.controller.WebBaseController;
import com.bst.bsj.bops.web.biz.MerchantService;
import com.bst.bsj.bops.web.biz.RoleService;
import com.bst.bsj.common.dal.dataobject.Merchant;
import com.bst.bsj.common.dal.dataobject.Role;
import com.bst.bsj.portal.util.StringUtil;
import com.homewaimai.common.lang.Paginator;
import com.homewaimai.common.lang.Result;

@Scope("prototype")
@Controller
@RequestMapping(value = "/bops/sys/role")
@SuppressWarnings("unchecked")
public class RoleController extends WebBaseController {

  @Autowired
  private RoleService roleService;

  @Autowired
  private MerchantService merchantService;

  /**
  * @Title: privilege
  * @Description: 跳转职位权限管理
  * @param req
  * @param resp
  * @return
  * @throws Exception
  * ModelAndView
  * @throws 
  * @creator     :yj
  * @create date :2016年5月13日 下午5:08:06
  * @modificator :yj
  * @modify date :2016年5月13日 下午5:08:06
   */
  @RequestMapping(value = "/position")
  public ModelAndView privilege(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    ModelAndView modelAndView = getBopsModelAndView("privilege/position");
    Result result=getAllRole(params);
    // 如果请求成功
    if (result.isSuccess()) {
      // 得到分页器
      Paginator paginator = (Paginator) result.getModels().get("paginator");
      // 得到数据
      List<Role> roleList = (List<Role>) result.getModels().get("roleList");
      modelAndView.addObject("roleList", roleList);
      modelAndView.addObject("paginator", paginator);
    }
    
    modelAndView.addObject("params", params);
    return modelAndView;
  }
  
  
  /**
  * @Title: queryRoles
  * @Description: TODO(这里用一句话描述这个方法的作用)
  * @param req
  * @param resp
  * @return
  * @throws Exception
  * ModelAndView
  * @throws 
  * @creator     :yj
  * @create date :2016年5月13日 下午6:25:53
  * @modificator :yj
  * @modify date :2016年5月13日 下午6:25:53
   */
  @RequestMapping(value = "/query")
  public ModelAndView queryRoles(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    ModelAndView modelAndView = getBopsModelAndView("privilege/position");
    String roleName=(String)params.get("roleName");
    if(StringUtil.isBlank(roleName)){
      params.remove("roleName");
    }
    
    Result result=getAllRole(params);
    // 如果请求成功
    if (result.isSuccess()) {
      // 得到分页器
      Paginator paginator = (Paginator) result.getModels().get("paginator");
      // 得到数据
      List<Role> roleList = (List<Role>) result.getModels().get("roleList");
      modelAndView.addObject("roleList", roleList);
      modelAndView.addObject("paginator", paginator);
    }
    
    modelAndView.addObject("params", params);
    return modelAndView;
  }
  
  
 /**
  * 
 * @Title: getAllRole
 * @Description: 获取职位列表
 * @param req
 * @param resp
 * @return
 * @throws Exception
 * ModelAndView
 * @throws 
 * @creator     :yj
 * @create date :2016年5月13日 下午5:09:36
 * @modificator :yj
 * @modify date :2016年5月13日 下午5:09:36
  */
  @RequestMapping(value = "/list")
  @ResponseBody
  public Result getAllRole(Map<String,Object> params) throws Exception {
    
    String pageNums = (String) params.get("pageNum");
    Integer pageNum = 0;

    if (StringUtil.isNumeric(pageNums)) {
      pageNum = Integer.valueOf(pageNums);
    }
    if (pageNum == null || pageNum == 0) {
      pageNum = 1;
    }
    params.put("page", pageNum);
    params.put("length", 10);
    params.put("offset", new Long((pageNum - 1) * 10));
    params.put("status", 1);

    Result result = roleService.selectAll(params);

    return result;
  }

  /**
   * 
  * @Title: saveRole
  * @Description: 保存角色
  * @param req
  * @param resp
  * @return
  * @throws Exception
  * ModelAndView
  * @throws 
  * @creator     :yj
  * @create date :2016年5月13日 下午3:33:01
  * @modificator :yj
  * @modify date :2016年5月13日 下午3:33:01
   */

  @RequestMapping(value = "/save")
  public ModelAndView saveRole(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    ModelAndView modelAndView = getBopsModelAndView("privilege/position");
    Boolean bool = exist(req);
    if (!bool) {
      modelAndView.addObject("msg", "职位名重复!");
      return modelAndView;
    }
    String id = (String) params.get("id");
    Role role = new Role();
    String roleName = (String) params.get("roleName");
    String remark = (String) params.get("remark");

    if (StringUtil.isNotBlank(roleName.trim())) {
      role.setRoleName(roleName.trim());
      if(roleName.trim().length()>16){
        modelAndView.addObject("msg", "职位名不可超过16位!");
        return modelAndView;
      }
    }

    role.setRemark(remark);
    role.setStatus(1);

    if (StringUtil.isBlank(id)) {//保存
      roleService.save(role);
    } else {//修改
      role.setId(Long.valueOf(id));
      roleService.update(role);
    }
    
    params.remove("roleName");
    Result result=getAllRole(params);
    // 如果请求成功
    if (result.isSuccess()) {
      // 得到分页器
      Paginator paginator = (Paginator) result.getModels().get("paginator");
      // 得到数据
      List<Role> roleList = (List<Role>) result.getModels().get("roleList");
      modelAndView.addObject("roleList", roleList);
      modelAndView.addObject("paginator", paginator);
    }
    
    
    return modelAndView;
  }

/**
* @Title: deleteRole
* @Description:删除
* @param req
* @param resp
* @return
* @throws Exception
* ModelAndView
* @throws 
* @creator     :yj
* @create date :2016年5月13日 下午7:36:29
* @modificator :yj
* @modify date :2016年5月13日 下午7:36:29
 */
  @RequestMapping(value = "/delete")
  @ResponseBody
  public String deleteRole(HttpServletRequest req, HttpServletResponse resp,String id) throws Exception {

    if (!StringUtil.isNumeric(id)) {
      return "error";  //非法提交
    }

    boolean flag = getMerchantByRoleId(Long.valueOf(id)); 
    if (!flag) {
      return "hasUser"; //角色下有用户
    }

    Role role = new Role();
    role.setId(Long.valueOf(id));
    role.setStatus(0);
    roleService.update(role);
    
    return "success";
  }

  
  @RequestMapping(value = "/exist")
  @ResponseBody
  public Boolean exist(HttpServletRequest req) throws Exception {
    Map<String, Object> params = getBopsParams(req);
    params.put("status", 1);
    Long counts=roleService.selectExistCount(params);
    if(counts>0){
      return false;
    }
    return true;
  }



  /**
   * 
  * @Title: getMerchantByRoleId
  * @Description: 校验role下是否有可用的 系统用户
  * @param mobile
  * @return
  * @throws Exception
  * Boolean
  * @throws 
  * @creator     :yj
  * @create date :2016年4月6日 上午11:01:09
  * @modificator :yj
  * @modify date :2016年4月6日 上午11:01:09
   */
  @RequestMapping(value = "/getRoleMerchant")
  @ResponseBody
  public Boolean getMerchantByRoleId(Long roleId) throws Exception {

    if (roleId != null) {
      List<Merchant> list = merchantService.getMerchantByRoleId(roleId);
      if (list.size() == 0) {
        return true;
      }
    }
    return false;
  }

}
